<?php

/**
 * Log.
 *
 * @author  yyc
 * @version 1.0
 * @package main
 * @date 2017-06-08 0008
 * @time 11:24:27
 */

/**
 *
 * ━━━━━━神兽出没━━━━━━
 * 　　　┏┓　　　┏┓
 * 　　┏┛┻━━━┛┻┓
 * 　　┃　　　　　　　┃
 * 　　┃　　　━　　　┃
 * 　　┃　┳┛　┗┳　┃
 * 　　┃　　　　　　　┃
 * 　　┃　　　┻　　　┃
 * 　　┃　　　　　　　┃
 * 　　┗━┓　　　┏━┛Code is far away from bug with the animal protecting
 * 　　　　┃　　　┃    神兽保佑,代码无bug
 * 　　　　┃　　　┃
 * 　　　　┃　　　┗━━━┓
 * 　　　　┃　　　　　　　┣┓
 * 　　　　┃　　　　　　　┏┛
 * 　　　　┗┓┓┏━┳┓┏┛
 * 　　　　　┃┫┫　┃┫┫
 * 　　　　　┗┻┛　┗┻┛
 *
 * ━━━━━━感觉萌萌哒━━━━━━
 */

namespace core;

use Monolog\Handler\StreamHandler;
use Monolog\Logger;
class Log
{
    private $log;
    private static $_instance = [];
    public static function getInstance($name = '',$log_dir = '',$log_name = '',$log_level = '')
    {
        if(!isset(self::$_instance[$name]) ||  ! (self::$_instance[$name] instanceof self) )
        {
            self::$_instance[$name] = new self($name ,$log_dir ,$log_name ,$log_level);
        }
        return self::$_instance[$name];

    }
    public function __construct($name = '',$log_dir = '',$log_name = '',$log_level = '')
    {

        $name = $name ?: 'SMSGateWay';

        $log_dir = $log_dir ?: __DIR__. '/../../logs/';
        $log_name = $log_name ?: date('Ym') . '.log';
        $log_level = $log_level ?: \Monolog\Logger::DEBUG;
        $this->log = new Logger($name);
        $this->log->pushHandler(new StreamHandler($log_dir.$log_name, $log_level));
    }

    public function __call($name, $arguments)
    {
        // TODO: Implement __call() method.
        if(method_exists($this->log,$name)){
            return call_user_func_array(array($this->log,$name),$arguments);
        }
        $this->log->error('The log method does not exist');
        return false;
    }
}